home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / hplip / firmware.py < prev    next >
Text File  |  2009-10-09  |  5KB  |  179 lines

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # (c) Copyright 2003-2009 Hewlett-Packard Development Company, L.P.
  5. #
  6. # This program is free software; you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation; either version 2 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with this program; if not, write to the Free Software
  18. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  19. #
  20. # Author: Don Welch
  21. #
  22.  
  23. __version__ = '2.4'
  24. __title__ = 'Firmware Download Utility'
  25. __mod__ = 'hp-firmware'
  26. __doc__ = "Download firmware to a device that requires downloaded firmware to function. (Note: Most printers do not require the use of this utility)."
  27.  
  28. # Std Lib
  29. import sys
  30. import getopt
  31. import gzip
  32. import operator
  33. import time
  34. import os
  35.  
  36. # Local
  37. from base.g import *
  38. from base import device, status, utils, tui, module
  39. from prnt import cups
  40.  
  41.  
  42. try:
  43.     mod = module.Module(__mod__, __title__, __version__, __doc__, None,
  44.                         (INTERACTIVE_MODE, GUI_MODE, NON_INTERACTIVE_MODE),
  45.                         (UI_TOOLKIT_QT4,), True, True)
  46.  
  47.     mod.setUsage(module.USAGE_FLAG_DEVICE_ARGS,
  48.         extra_options=[
  49.         ("Use USB IDs to specify printer:", "-s bbb:ddd, where bbb is the USB bus ID and ddd is the USB device ID. The ':' and all leading zeroes must be present.", "option", False),
  50.         ("Seconds to delay before download:", "-y<secs> or --delay=<secs> (float value, e.g. 0.5)", "option", False)],
  51.          see_also_list=['hp-plugin', 'hp-toolbox'])
  52.  
  53.     opts, device_uri, printer_name, mode, ui_toolkit, lang = \
  54.         mod.parseStdOpts('y:s:', ['delay='])
  55.  
  56.     device_uri = None
  57.     printer_name = None
  58.     usb_bus_node = None
  59.     usb_bus_id = None
  60.     usb_device_id = None
  61.     silent = False
  62.     delay = 0.0
  63.  
  64.     for o, a in opts:
  65.         if o == '-s':
  66.             silent = True
  67.             try:
  68.                 usb_bus_id, usb_device_id = a.split(":", 1)
  69.                 log.debug("USB bus ID: %s" % usb_bus_id)
  70.                 log.debug("USB device ID: %s" % usb_device_id)
  71.             except ValueError:
  72.                 log.error("Invalid USB IDs: %s" % a)
  73.                 sys.exit(1)
  74.  
  75.             if len(usb_bus_id) != 3 or len(usb_device_id) != 3:
  76.                 log.error("Invalid USB IDs '%s'. Must be the format: bbb.ddd" % a)
  77.                 sys.exit(1)
  78.  
  79.             usb_bus_node = a
  80.             mode = NON_INTERACTIVE_MODE
  81.  
  82.         elif o in ('-y', '--delay'):
  83.             try:
  84.                 delay = float(a)
  85.             except ValueError:
  86.                 log.error("Invalid delay value. Must be numeric (float) value. Setting delay to 0.0")
  87.                 delay = 0.0
  88.  
  89.             mode = NON_INTERACTIVE_MODE
  90.  
  91.  
  92.     if mode == GUI_MODE:
  93.         if not utils.canEnterGUIMode4():
  94.             log.error("%s -u/--gui requires Qt4 GUI support. Entering interactive mode." % __mod__)
  95.             mode = INTERACTIVE_MODE
  96.  
  97.     if mode in (GUI_MODE, INTERACTIVE_MODE):
  98.         mod.quiet = False
  99.  
  100.     if mode == GUI_MODE:
  101.         try:
  102.             from PyQt4.QtGui import QApplication
  103.             from ui4.firmwaredialog import FirmwareDialog
  104.         except ImportError:
  105.             log.error("Unable to load Qt4 support. Is it installed?")
  106.             sys.exit(1)
  107.  
  108.  
  109.         mod.showTitle()
  110.  
  111.         device_uri = mod.getDeviceUri(device_uri, printer_name,
  112.             filter={'fw-download': (operator.gt, 0)})
  113.  
  114.         if 1:
  115.             app = QApplication(sys.argv)
  116.  
  117.             dialog = FirmwareDialog(None, device_uri)
  118.             dialog.show()
  119.             try:
  120.                 log.debug("Starting GUI loop...")
  121.                 app.exec_()
  122.             except KeyboardInterrupt:
  123.                 sys.exit(0)
  124.  
  125.         sys.exit(0)
  126.  
  127.     mod.showTitle()
  128.  
  129.     if usb_bus_node is not None:
  130.         log.debug("USB bus node: %s" % usb_bus_node)
  131.         device_uri, sane_uri, fax_uri = device.makeURI(usb_bus_node, 1)
  132.  
  133.         if not device_uri:
  134.             log.error("Invalid USB Device ID or USB bus ID. No device found.")
  135.             sys.exit(1)
  136.  
  137.     else:
  138.         device_uri = mod.getDeviceUri(device_uri, printer_name,
  139.             filter={'fw-download': (operator.gt, 0)})
  140.  
  141.     try:
  142.         d = device.Device(device_uri, printer_name)
  143.     except Error:
  144.         log.error("Error opening device. Exiting.")
  145.         sys.exit(1)
  146.  
  147.     try:
  148.         if delay:
  149.              time.sleep(delay)
  150.  
  151.         try:
  152.             d.open()
  153.             d.queryModel()
  154.         except Error, e:
  155.             log.error("Error opening device (%s). Exiting." % e.msg)
  156.             sys.exit(1)
  157.  
  158.         fw_download = d.mq.get('fw-download', 0)
  159.  
  160.         if fw_download:
  161.             if d.downloadFirmware(usb_bus_id, usb_device_id):
  162.                 if not silent:
  163.                     log.info("Done.")
  164.                 sys.exit(0)
  165.  
  166.             else:
  167.                 log.error("Firmware download failed.")
  168.                 sys.exit(1)
  169.  
  170.         else:
  171.             log.error("Device %s does not support or require firmware download." % device_uri)
  172.             sys.exit(1)
  173.  
  174.     finally:
  175.         d.close()
  176.  
  177. except KeyboardInterrupt:
  178.     log.error("User exit")
  179.